import { staticRoutesList } from './../../../router/routes/staticRouter';
import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table';
import { rules } from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
import { getWeekMonthQuarterYear } from '/@/utils';
import { getAgreementOptions, ceshi } from './SysDevice.api';

import { filterMultiDictText } from '/@/utils/dict/JDictSelectUtil';
import { getDictItemsByCode } from '/@/utils/dict/index';
import { getDictItems } from '/@/api/common/api';
import { ref, unref,h } from 'vue';
import { getHeaders } from '/@/utils/common/compUtils';
// 协议字典缓存
const agreementDict = ref<Record<string, string>>({});
// 初始化协议字典
/* async function initAgreementDict() {
  try {
    const res = await getAgreementOptions();
    agreementDict.value = res.records.reduce((dict, item) => {
      dict[item.id] = item.agreementName;
      return dict;
    }, {});
  } catch (e) {
    console.error('协议字典加载失败', e);
  }
} */
/* async function ceshi_c() {
  try {
    const { result } = await ceshi();
    console.log('测试接口响应数据:', result);
    // 如果需要查看完整响应结构
    console.log('完整响应对象:', result);
  } catch (e: any) {
    console.error('测试接口请求失败:', {
      message: e.message,
      status: e.response?.status,
      data: e.response?.data,
    });
  }
} */
// ceshi_c();

// 在组件初始化时调用
// initAgreementDict();
//列表数据
export const columns: BasicColumn[] = [
  {
    title: '数据源id',
    align: 'center',
    dataIndex: 'id',
  },
  {
    title: '数据源名称',
    align: 'center',
    dataIndex: 'deviceName',
  },
  {
    title: '数据源一级分类',
    align: 'center',
    dataIndex: 'deviceMark',
    customRender: ({ text }) => {
      // 使用同步渲染方法
      return text ? render.renderDict(text, 'device_mark') : '--';
    },
  },
  {
    title: '数据源标识',
    align: 'center',
    dataIndex: 'deviceId',
  },
  {
    title: '协议名称',
    align: 'center',
    dataIndex: 'agreementId',
    customRender: ({ text }) => {
      // 使用前端缓存的协议字典
      return agreementDict.value[text] || text;
    },
  },
  {
    title: '信宿地址',
    align: 'center',
    dataIndex: 'deviceIp',
  },
  {
    title: '数据源二级分类',
    align: 'center',
    dataIndex: 'deviceCategory',
  },
  // {
  //   title: '文件地址',
  //   align: 'center',
  //   dataIndex: 'fileAddr',
  // },
  {
    title: '组播ip',
    align: 'center',
    dataIndex: 'groupIp',
  },
  {
    title: '组播端口',
    align: 'center',
    dataIndex: 'groupPort',
  },
/*   {
    title: 'udp监听状态',
    align: 'center',
    dataIndex: 'isOpen',
    customRender: ({ text }) => {
      if(null!=text){
        return text==1?'监听中':'未监听'
      }
    },
  }, */
  {
    title: 'udp监听状态',
    align: 'center',
    dataIndex: 'isOpen',
    customRender: ({ text }) => {
      if(text===null){
        return '--'
      }
      const statusText = text===1?'监听中':'未监听'
      const color = text===1?'green':'red'
      return h("span",{style:{color:color,fontWeight:'bold'}},statusText)
    },
  },
];
//查询数据
export const searchFormSchema: FormSchema[] = [
  {
    label: '数据源名称',
    field: 'deviceName',
    component: 'Input',
    //colProps: {span: 6},
  },
];
//表单数据
export const formSchema: FormSchema[] = [
  {
    label: '名称',
    field: 'deviceName',
    component: 'Input',
    rules: [
      {
        required: true,
        message: '请输入名称',
      },
    ],
  },
  {
    label: '数据源一级分类',
    field: 'deviceMark',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'device_mark', //改成下拉框
      type: 'list',
      valueField: 'value', // 存储字典值（默认）
      labelField: 'text', // 显示字典文本（默认）
      // 添加空值处理
      getPopupContainer: () => document.body,
      notFoundContent: '暂无数据',
    },
    rules: [
      {
        required: true,
        message: '请输入数据源一级分类',
      },
    ],
  },
  {
    label: '数据源标识',
    field: 'deviceId',
    component: 'Input',
    rules: [
      {
        required: true,
        message: '请输入数据源标识',
      },
    ],
  },
  {
    label: '数据源二级分类',
    field: 'deviceCategory',
    component: 'Input',
    rules: [
      {
        required: true,
        message: '请输入数据源二级分类',
      },
    ],
  },
  {
    label: '协议名称',
    field: 'agreementId',
    component: 'ApiSelect', // 使用接口选择组件
    componentProps: ({ formModel }) => ({
      api: getAgreementOptions, // 接口请求方法
      resultField: 'records', // 接口返回字段（根据实际接口调整）
      labelField: 'title', // 显示文本字段
      valueField: 'id', // 存储值字段
      placeholder: '请选择协议',
      onChange: (value: string, record: Recordable) => {
        console.log('选择的协议:', record);
        if (formModel) {
          formModel.agreementName = record?.agreementName;
        }
      },
    }),
    rules: [
      {
        required: true,
        message: '请输入协议名称',
      },
    ],
  },
  {
    label: 'OIDS',
    field: 'oids',
    component: 'InputTextArea',
    componentProps: {
      placeholder: '多个oids 用逗号分隔',
    },
    show: ({ values }) => values?.agreementName === 'snmp',
    dynamicRules: ({ model }) => {
      if (model?.agreementName === 'snmp') {
        return [
          {
            required: true,
            validator: (_rule, value) => {
              if (!value || value.trim() === '') {
                return Promise.reject('oids必填');
              }
              return Promise.resolve();
            },
            trigger: ['blur', 'change'],
          },
        ];
      } else {
        return [];
      }
    },
  },
  {
    label: '社区名',
    field: 'community',
    component: 'Input',
    show: ({ values }) => values?.agreementName === 'snmp',
  },
  {
    label: '组播ip',
    field: 'groupIp',
    component: 'Input',
    show: ({ values }) => values?.agreementName === 'udp',
    dynamicRules: ({ model }) => {
      if (model?.agreementName === 'udp') {
        return [
          {
            required: true,
            validator: (_rule, value) => {
              if (!value || value.trim() === '') {
                return Promise.reject('ip必填');
              }
              return Promise.resolve();
            },
            trigger: ['blur', 'change'],
          },
        ];
      } else {
        return [];
      }
    },
  },
  {
    label: '组播端口',
    field: 'groupPort',
    component: 'InputNumber',
    show: ({ values }) => values?.agreementName === 'udp',
    dynamicRules: ({ model }) => {
      if (model?.agreementName === 'udp') {
        return [
          {
            required: true,
            validator: (_rule, value) => {
              if (!value || value.trim() === '') {
                return Promise.reject('组播端口必填');
              }
              return Promise.resolve();
            },
            trigger: ['blur', 'change'],
          },
        ];
      } else {
        return [];
      }
    },
  },
  {
    label: '信宿地址',
    field: 'deviceIp',
    component: 'InputTextArea',
    dynamicRules: ({ model }) => {
      // 如果是ping协议，返回空规则（不验证）
      if (model?.agreementName === 'https' || model?.agreementName === 'http' || model?.agreementName === 'probe') {
        return [];
      }
      // udp、ping 时，必填验证
      return [
        {
          required: true,
          validator: (_rule, value) => {
            if (!value || value.trim() === '') {
              return Promise.reject('ip必填');
            }
            return Promise.resolve();
          },
          trigger: ['blur', 'change'],
        },
      ];
    },
    show: ({ values }) => {
      // 当 agreementName 既不等于 'ping' 也不等于 'snmp' 时显示
      return values?.agreementName != 'ping';
    },
  },

  {
    label: '文件上传',
    field: 'fileAddr',
    // 关键：通过fieldMapToTime绑定fileAddr字段到JUpload的value属性
    component: 'JUpload',
    componentProps: {
      // 上传接口地址
      action: '/jeecgboot/xichang/sysDevice/upload',
      // 允许上传的文件类型（与accept属性对应）
      accept: '.doc,.docx,.pdf,.xls,.xlsx,.jpg,.png',
      // 最大文件大小（单位：MB）
      maxSize: 10,
      // 是否允许多文件上传
      multiple: false,
      // 关键：非图片模式（默认值，可不写）
      fileType: 'all',
      // 上传后返回值格式：true返回文件URL，false返回详细信息（fileName、filePath等）
      returnUrl: true,
      // 最大上传数量（0表示无限制）
      maxCount: 1,
      // 是否显示下载按钮
      download: true,
      // 删除时是否显示确认框
      removeConfirm: true,
      headers: {
        ...getHeaders(),
        Accept: 'application/json, text/plain, */*',
      },
      uploadTip: '未上传解析模板按内置规则解析',
      // 🔴 可选：自定义提示样式
      tipColor: '#888', // 浅灰色
      // tipFontSize: '13px', // 稍大字体
    },
    show: ({ values }) => values?.agreementName === 'udp',
  },
  {
    field: 'excelId',
    component: 'JDictSelectTag',
    label: '参数模版',
    componentProps: {
      dictCode: 'sys_excel_template,name,id',
    },
    show: ({ values }) => values?.agreementName === 'udp',
  },

  // TODO 主键隐藏字段，目前写死为ID
  {
    label: '',
    field: 'id',
    component: 'Input',
    show: false,
  },
  {
    label: '',
    field: 'agreementName',
    component: 'Input',
    show: false, // 隐藏该字段
  },
];

// 高级查询数据
export const superQuerySchema = {
  deviceName: { title: '数据源名称', order: 0, view: 'text', type: 'string' },
  deviceId: { title: '数据源标识', order: 1, view: 'text', type: 'string' },
  agreementId: { title: '协议id', order: 2, view: 'text', type: 'string' },
  deviceIp: { title: '信宿地址', order: 3, view: 'text', type: 'string' },
  deviceCategory: { title: '数据源分类', order: 4, view: 'text', type: 'string' },
  fileAddr: { title: '文件地址', order: 5, view: 'text', type: 'string' },
  deviceMark: { title: '备注', order: 8, view: 'text', type: 'string' },
};

/**
 * 流程表单调用这个方法获取formSchema
 * @param param
 */
export function getBpmFormSchema(_formData): FormSchema[] {
  // 默认和原始表单保持一致 如果流程中配置了权限数据，这里需要单独处理formSchema
  return formSchema;
}
